package service.array;

import domain.dto.*;
import domain.entity.*;
import domain.vo.*;
import service.*;

public class RoleService extends BaseService<Role, RoleDto, RoleVo>
        implements IRoleService {
    /**
     * 单例模式
     */
    private static IRoleService singleton;
    private RoleService() {
        data = new Role[DATA_SIZE + 1];
        temp = new RoleVo[DATA_SIZE];
    }
    public static IRoleService getInstance() {
        if(singleton == null) {
            singleton = new RoleService();
        }
        return singleton;
    }

    private  IUserService userService ;

    @Override
     Role createEntity(RoleDto dto, int id) {
        // 使⽤传⼊的部⻔传输对象（DeptDto）中的信息创建—个新的部⻔实体对象（Dept），并返回
        return new Role(id, dto.name, dto.dataScope);
    }
    @Override
     void updateEntity(RoleDto dto, Role role) {
        role.name = dto.name;
        role.dataScope = dto.dataScope;
    }

    @Override
     RoleVo convertToVo(Role role) {
        return new RoleVo(role.getId(), role.name,role.dataScope);
    }


    @Override
    public  Result delete(int id) {
        if (!existsById(id)) {
            return Result.failure("删除失败，不存在该数据");
        }
        if (id < 1 || id >= idCounter || data[id] == null) {
            // 如果 ID ⽆效，返回删除失败的结果
            return Result.failure("删除失败，不存在该数据");
        }
        if (userService == null) { // 懒加载
            userService =  UserService.getInstance();
        }
        if (userService.roleInUse(id)) {
            return Result.failure("删除失败，有⽤户具有该⻆⾊，不能删除");
        }
        // 将指定 ID 的部⻔数据置为 null，表示删除该数据
        data[id] = null;
        // 返回删除成功的结果
        return Result.success("删除成功", null);
    }

}
